Magnetic storage systems such as disk drives include a magnetic medium or platter with a magnetic coating that is divided into data tracks. The data tracks are divided into data sectors that store fixed-size data blocks. A read/write head typically includes a write circuit and a write element such as an inductor that selectively generates positive and negative magnetic fields that are stored by the magnetic medium. The stored positive and negative fields represent binary ones and zeros. The read/write head includes an element such as a magneto-resistive element that senses the stored magnetic field to read data from the magnetic medium. A spindle motor rotates the platter and an actuator arm positions the read/write head relative to the magnetic medium.
Magnetic storage systems typically code user data using Run Length Limited (RLL) code. RLL coding eliminates sequences in the user data that may degrade the performance of timing circuits of the magnetic storage system. For example, an RLL code enforces constraints on the number of consecutive ones and/or zeros that are permitted in the data. The efficiency of the RLL code is typically measured in terms of a code rate. For every m bits of user data, an encoded word with n bits is written to the storage media. RLL codes are used to eliminate unwanted bit patterns in the original data and typically do not have error correction capability.
Referring now to FIG. 1, a write path 10 in a conventional data storage system includes an error correction coding (ECC) encoder (ENC) 12 that receives user data. ECC ENC 12 generates cyclic redundancy check (CRC) and/or ECC bits that are appended to the user data. The user data, CRC bits, and/or ECC bits are output by ECC ENC 12 to an input of XOR gate 14. Another input of XOR gate 14 receives an output of a data scrambler 16, which generates a pseudo-random binary sequence. The scrambler here is used here purely for the purpose of randomizing data and does not guarantee any sort of RLL constraint.
A scrambled output of XOR gate 14 is input to a run length limited (RLL) ENC 18. RLL ENC 18 encodes bit strings to prevent unwanted data patterns that violate the constraint and outputs a bit stream to a read channel (R/C). Typically, RLL ENC 18 converts a block of NRLL bits into (NRLL+1) bits to avoid the unwanted data patterns.
Referring to FIG. 2, a read path 20 of a data storage system includes an RLL decoder (DEC) 22 that receives the bit stream from the read channel and decodes the bit stream. An output of RLL DEC 22 is input to an XOR gate 24. A scrambler 26, which is the same as scrambler 16, generates the pseudo-random binary sequence that is input to another input of XOR gate 24. An output of XOR gate 24 is input to an ECC DEC 26, which performs ECC decoding and outputs the user data. RLL ENC 18 eliminates unwanted bit patterns. However, the RLL coding also reduces data storage capacity. In other words, RLL coding increases channel bit density (CBD), which reduces SNR and leads to lower reliability.